package praktikum_I.blatt_II.aufgabe1;

import java.util.List;

/**
 *  Gruppe EwertWekwert
 *  Sebastian Ewert
 *  Stephan Wekwert
 */

public interface Matrix_inter<E> {


	// Rueckgabetyp: 2 - dimensionales - Array

    /**
     * Addiert zwei Matrizen, die aus 2 - dimensionalen Arrays bestehen
     * @param aMatrix
     * @param oMatrix
     * @return double[][]
     */
	public double[][]  sumArray(double[][] aMatrix, double[][] oMatrix);

    /**
     * Multipliziert eine Matrix, die aus einem 2 - dimensionalen Array besteht, mit einem Skalar
     * @param aMatrix
     * @return double[][]
     */
	public double[][]  mulArray(double[][] aMatrix, int skalar);

    /**
     * Multipliziert zwei Matrizen, die aus 2 - dimensionalen Arrays bestehen
     * @param aMatrix
     * @param oMatrix
     * @return double[][]
     */
	public double[][]  mulArray(double[][] aMatrix, double[][] oMatrix);

    /**
     * Potenziert eine Matrix, die aus einem 2 - dimensionalen Array besteht, mit einem Exponenten
     * @param aMatrix
     * @param exponent
     * @return double[][]
     */
	public double[][]  powArray(double[][] aMatrix, int exponent);


	// Rueckgabetyp: Lists in einem Array

    /**
     * Addiert zwei Matrizen, die aus Listen in einem Array bestehen
     * @param aMatrix
     * @param oMatrix
     * @return List<Double>[]
     */

    public List<Double>[]  sumArrayList(List<Double>[] aMatrix, List<Double>[] oMatrix);

    /**
     * Multipliziert eine Matrix, die aus Listen in einem Array besteht, mit einem Skalar
     * @param aMatrix
     * @param skalar
     * @return List<Double>[]
     */

    public List<Double>[]  mulArrayList(List<Double>[] aMatrix, int skalar);

    /**
     * Multipliziert zwei Matrizen, die aus Listen in einem Array bestehen
     * @param aMatrix
     * @param oMatrix
     * @return List<Double>[]
     */

    public List<Double>[]  mulArrayList(List<Double>[] aMatrix, List<Double>[] oMatrix);

    /**
     * Potenziert eine Matrix, die aus Listen in einem Array besteht, mit einem Exponenten
     * @param aMatrix
     * @param exponent
     * @return List<Double>[]
     */

    public List<Double>[]  powArrayList(List<Double>[] aMatrix, int exponent);



    // Rueckgabetyp: List

    /**
     * Addiert zwei Matrizen, die aus einer Liste bestehen
     * @param aMatrix
     * @param oMatrix
     * @return List<Point>
     */

    public List<Point>  sumList(List<Point> aMatrix, List<Point> oMatrix);

    /**
     * Multipliziert eine Matrix, die aus einer Liste bestehen, mit einem Skalar
     * @param aMatrix
     * @return List<Point>
     */

    public List<Point>  mulList(List<Point> aMatrix, double skalar);

    /**
     * Multipliziert zwei Matrizen, die aus einer Liste bestehen
     * @param aMatrix
     * @param oMatrix
     * @return List<Point>
     */

    public List<Point>  mulList(List<Point> aMatrix, List<Point> oMatrix);

    /**
     * Gibt das Ergebnis des Potenzierens aus der rekursiven Untermethode als
     * Liste aus
     * @param aMatrix
     * @param exponent
     * @return List<Point>
     */

    public List<Point>  powList(List<Point> aMatrix, int exponent);

}
